# 36. random模块 - 随机模块

# rendom随机模块

随机模块:在某个范围内取到的每一个值的概率是相同的

常用随机模块被我分为四个部分,随机小数、随机整数、随机抽取、打乱顺序。

# 随机小数

# 在 0 - 1 之内随机取小数 - random

import random
print(random.random())

执行结果:
0.35509263258987933

# 在指定的范围内取随机小数 - uniform

import random
print(random.uniform(1,3))
print(random.uniform(1,3))

执行结果:
1.2834207022093207
2.1313791664762416

# 随机整数

# 在指定范围内取整数(顾尾) - randint

什么意思呢,就是比如给出(1,2),那么2是有机率匹配出,因为randint是顾头又顾尾

import random
print(random.randint(1,3))
print(random.randint(1,3))
print(random.randint(1,3))

执行结果:
1
1
3

# 在指定范围内取整数(不顾尾)-rendrange

什么意思呢,就是比如给出(1,2),那么2是不可以匹配出的,因为rendrange是顾头不顾尾

import random
print(random.randrange(1,3))
print(random.randrange(1,3))
print(random.randrange(1,3))

执行结果:
2
2
2

# 随机抽取

# 随机抽取一个值 - choice

import random
so = [1,2,3,"111",{"k":"v"},(111,222),{111,222},6,7,4,5,8,9]
print(random.choice(so))

执行结果:
{222, 111}

随机抽取列表中的一个值

# 随机抽取多个值 - sample

import random
so = [1,2,3,"111",{"k":"v"},(111,222),{111,222},6,7,4,5,8,9]
print(random.sample(so,2))

执行结果:
[(111, 222), 2]

随机抽取列表中的二个值

# 打乱顺序 - shuffle

注意:shuffle方法只能用于可改、有顺序的数据类型才可以打乱顺序

import random
so = [1,2,3,"111",{"k":"v"},(111,222),{111,222},6,7,4,5,8,9]
random.shuffle(so)
print(so)

执行结果:
[(111, 222), '111', 1, 6, 7, 2, 3, {'k': 'v'}, 9, {222, 111}, 8, 5, 4]

# 练习题

# 随机生成验证码

# 随机生成验证码 - 全整数

随机生成4位数的验证码,全整数

第一种方法 - 有点没水平

import random
so = []
wo = []
for i in range(10):
    so.append(str(i))
random.shuffle(so)
for i in range(4):
    wo.append(so[i])
print(''.join(wo))

执行结果:
3569

第二种方法 - 比较高大上

import random

## 普通版
so = ''
for i in range(4):
    soo = random.randint(0,9)
    so += str(soo)
print(so)

执行结果:
7964


## 函数版
def cold(n=4):
    so = ''
    for i in range(n):
        soo = random.randint(0, 9)
        so += str(soo)
    return so
print(cold())
print(cold(6))

执行结果:
6045
607207

# 随机生成验证码 - 整数+字母

随机生成6位数的验证码,整数+字母

import random
so = []
wo = ''
for i in range(9):
    so.append(str(i))
for i in range(65,91):
    so.append(chr(i))
for i in range(97,123):
    so.append(chr(i))
random.shuffle(so)
for i in range(6):
    wo += so[i]
print(wo)

执行结果:
zUckPB

# 随机生成验证码-可全整数-可数字+字母

## 默认生成6位验证码,数字+字母
import random
def code(time = 6, pattern = True):
    code_result = ''
    for i in range(time):
        digit = str(random.randint(0,9))
        if pattern:
            minuscule = chr(random.randint(97,122))
            majuscule = chr(random.randint(65,90))
            digit = random.choice([digit,minuscule,majuscule])
        code_result += digit
    return code_result
code = code()
print(code)

执行结果:
z3qRD594